<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1.url组成 协议 域名 端口 路径 参数
        // http://www.baidu.com:80/index?name=zhangsan
        // 2.js里如何实现继承
        // ES5:

        // function Dad(height){
        //     this.name = "张三";
        //     this.age = 56;
        //     this.height = height;
        //     this.money = "$1000000000";
        //     // this.fn1 = function(){
        //     //     console.log("fn1")
        //     // }
        // }
        // Dad.prototype.fn = function(){
        //     console.log("fn");
        // }

        // function Son(...arg){
        //     // Dad.call(this,height);
        //     // Dad.apply(this,[height])
        //     // Dad.apply(this,arguments)
        //     // Dad.apply(this,arg);
        //     // currey 柯里化：把多元参数转换成一元参数的过程
        //     Dad.bind(this)(...arg);
        //     this.play = "玩";
        // }

        // let zhangsi = new Son("178cm");
        // console.log(zhangsi);



    //     function add(a,b,c){
    //         return a + b + c;
    //     }

    //     // function curreyFn(add){
    //     //     return function(a){
    //     //         return function(b){
    //     //             return function(c){
    //     //                return add(a,b,c);
    //     //             }
    //     //         }
    //     //     }
    //     // }
    //     const curreyFn = add=>a=>b=>c=>add(a,b,c);

    //     let myfn = curreyFn(add);
    //    console.log( myfn(1)(2)(3));


    // ES6继承
    // class Dad{
    //     constructor(height){
    //         this.name = "张三";
    //         this.age = 56;
    //         this.height = height;
    //         this.money = "$1000000000";
    //     }
    //     test(){
    //         console.log("test");
    //     }
    // }

    // class Son extends Dad{
    //     constructor(height){
    //         super(height);
    //         // console.log(super);
    //         this.play = "玩";
    //     }
    //     fn(){
    //         super.test();
    //     }
    // }
    // let zhangsi = new Son("178cm");
    // console.log(zhangsi);
    // zhangsi.fn();

    // 1.ajax流程 ？
    // new XMLHttpRequest();
    // xhr.open();
    // xhr.send();
    // xhr.onreadychangestatus = function(){
        // readyStatus === 4 status ==200
    // }

    // 2.什么是原型和原型链 ？
    // 显示原型： 每一个构造函数 都有2个部分构成 自身属性和方法  prototype属性和方法
    // 隐式原型 ： __proto__ 
    // 公共空间
    // 固有属性constructor 
    // function Person(){
    //     // this.fn = function(){
    //     //     console.log("fn")
    //     // }
    // }
    // // Person.prototype.fn = function(){
    // //         console.log("fn")
    // // }
    // // constructor 原型固有属性 constructor会指向构造器本身
    // // Person.prototype.constructor = Person
    // Person.prototype = {
    //     constructor:Person,
    //     fn:function(){
    //         console.log("fn");
    //     }
    // }


    // // Person.prototype.fn = function(){
    // //     console.log(111);
    // // }
    // let zhangsan = new Person();
    // let lisi = new Person();
    // console.log(zhangsan.fn===lisi.fn);
    // console.log(Person.prototype===zhangsan.__proto__);

    // 原型的类型 Object.prototye 原型链查找规则 就近原则 
    // Object.prototype.age = 40;
    // let obj = {
    //     age:20
    // }

    // obj.__proto__.age = 30;
    // // Object.setPrototypeOf
   
    // console.log(obj.age);
    // instanceof 
    // for in 

    </script>
</body>
</html>